From c9cac5fbc3f0d7eccef9bcd10157fbeccab23e86 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 1 Feb 2021 19:55:56 -0500 Subject: [PATCH] composetable: Add tests for matching This tests the api we use to match key sequences against compose tables. --- testsuite/gtk/compose/match | 3 ++ testsuite/gtk/composetable.c | 68 ++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) create mode 100644 testsuite/gtk/compose/match diff --git a/testsuite/gtk/compose/match b/testsuite/gtk/compose/match new file mode 100644 index 0000000000..0554ac02c2 --- /dev/null +++ b/testsuite/gtk/compose/match @@ -0,0 +1,3 @@ + : "!" + : "?" + : "🥂" diff --git a/testsuite/gtk/composetable.c b/testsuite/gtk/composetable.c index 2148163349..7c0a767e2f 100644 --- a/testsuite/gtk/composetable.c +++ b/testsuite/gtk/composetable.c @@ -84,6 +84,73 @@ compose_table_compare (gconstpointer data) g_free (expected); } +static void +compose_table_match (void) +{ + GSList *tables = NULL; + GtkComposeTable *table; + char *file; + guint16 buffer[8] = { 0, }; + gboolean finish, match, ret; + gunichar ch; + + file = g_build_filename (g_test_get_dir (G_TEST_DIST), "compose", "match", NULL); + + tables = gtk_compose_table_list_add_file (tables, file); + + g_assert_true (g_slist_length (tables) == 1); + + table = tables->data; + + buffer[0] = GDK_KEY_Multi_key; + buffer[1] = 0; + ret = gtk_compose_table_check (table, buffer, 1, &finish, &match, &ch); + g_assert_true (ret); + g_assert_false (finish); + g_assert_false (match); + g_assert_true (ch == 0); + + buffer[0] = GDK_KEY_a; + buffer[1] = 0; + ret = gtk_compose_table_check (table, buffer, 1, &finish, &match, &ch); + g_assert_false (ret); + g_assert_false (finish); + g_assert_false (match); + g_assert_true (ch == 0); + + buffer[0] = GDK_KEY_Multi_key; + buffer[1] = GDK_KEY_s; + buffer[2] = GDK_KEY_e; + ret = gtk_compose_table_check (table, buffer, 3, &finish, &match, &ch); + g_assert_true (ret); + g_assert_false (finish); + g_assert_false (match); + g_assert_true (ch == 0); + + buffer[0] = GDK_KEY_Multi_key; + buffer[1] = GDK_KEY_s; + buffer[2] = GDK_KEY_e; + buffer[3] = GDK_KEY_q; + ret = gtk_compose_table_check (table, buffer, 4, &finish, &match, &ch); + g_assert_true (ret); + g_assert_false (finish); + g_assert_true (match); + g_assert_true (ch == '!'); + + buffer[0] = GDK_KEY_Multi_key; + buffer[1] = GDK_KEY_s; + buffer[2] = GDK_KEY_e; + buffer[3] = GDK_KEY_q; + buffer[4] = GDK_KEY_u; + ret = gtk_compose_table_check (table, buffer, 5, &finish, &match, &ch); + g_assert_true (ret); + g_assert_true (finish); + g_assert_true (match); + g_assert_true (ch == '?'); + + g_free (file); +} + int main (int argc, char *argv[]) { @@ -108,6 +175,7 @@ main (int argc, char *argv[]) g_test_add_data_func ("/compose-table/octal", "octal", compose_table_compare); g_test_add_data_func ("/compose-table/codepoint", "codepoint", compose_table_compare); g_test_add_data_func ("/compose-table/multi", "multi", compose_table_compare); + g_test_add_func ("/compose-table/match", compose_table_match); return g_test_run (); } -- 2.30.2